package team.archai.nexus.flow.service;

import team.archai.nexus.flow.constant.ProcessConstant;
import team.archai.nexus.flow.vo.*;

import java.util.List;
import java.util.stream.Collectors;

/**
 * @author li shi bin
 * @desc: 流程基础数据
 */
public interface IProcessBasicsData {

    /**
     * 获取受理人类型
     *
     * @return 受理人类型
     */
    default List<AssigneeTypeVO> assigneeTypes() {
        return ProcessConstant.ASSIGNEE_TYPE_LIST;
    }

    /**
     * 获取条件分类
     *
     * @return 条件分类
     */
    default List<ConditionCategoryVO> conditionCategories() {
        return ProcessConstant.CONDITION_CATEGORIES;
    }

    /**
     * 获取条件集合
     *
     * @param conditionCategory 条件分类
     * @return 条件集合
     */
    default List<ConditionVO> conditions(Integer conditionCategory) {
        return ProcessConstant.CONDITIONS.stream().filter((r) -> r.getCategory().equals(conditionCategory)).collect(Collectors.toList());
    }

    /**
     * 获取流程分类
     *
     * @return
     */
    List<FlowBaseVO> categories();

    /**
     * 获取流程节点集合
     *
     * @return 流程节点集合
     */
    default List<FlowNodeVO> flowNodes() {
        return ProcessConstant.FLOW_NODES;
    }

    /**
     * 获取任务监听器集合
     *
     * @return 任务监听器集合
     */
    default List<FlowListenerVO> taskListeners() {
        return ProcessConstant.TASK_LISTENERS;
    }
}
